#ifndef CALENDAR_H
#define CALENDAR_H

#include <QWidget>
#include <QFontDatabase>
#include <QFont>
#include <QDate>
#include <QColor>
#include <QToolButton>
#include <QPushButton>
#include <QComboBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QList>
#include <QGridLayout>
#include "calendaritem.h"
#include "calendarinfo.h"
#include <QDate>

class Calendar : public QWidget
{
    Q_OBJECT
public:
    Calendar(QWidget *parent=0);

    enum CalendarStyle
    {
        CalendarStyle_Red = 0,
    };

    enum WeekNameFormat
    {
        WeekNameFormat_Short = 0,
        WeekNameFormat_Normal = 1,
        WeekNameFormat_Long = 2,
        WeekNameFormat_En = 3,
    };

    enum SelectType
    {
        SelectType_Rect = 0,
        SelectType_Circle = 1,
        SelectType_Triangle = 2,
        SelectType_Image = 3,
    };

    QFont iconFont;
    bool showLunar;
    bool btnClick;
    CalendarStyle calendarStyle;
    WeekNameFormat weekNameFormat;
    QDate date;
    QColor weekTextColor;
    QColor weekBgColor;
    QString bgImage;
    SelectType selectType;

    QColor borderColor;
    QColor weekColor;
    QColor superColor;
    QColor lunarColor;
    QColor currentTextColor;
    QColor otherTextColor;
    QColor selectTextColor;
    QColor hoverTextColor;
    QColor currentLunarColor;
    QColor otherLunarColor;
    QColor selectLunarColor;
    QColor hoverLunarColor;
    QColor currentBgColor;
    QColor otherBgColor;
    QColor selectBgColor;
    QColor hoverBgColor;

    QComboBox *cboxYear;
    QComboBox *cboxMonth;

    QList<QLabel *> labelWeeks;
    QList<CalendarItem *> dayItems;

    void initWidget();
    void initStyle();
    void initDate();
    void setWeekFormat(const Calendar::WeekNameFormat &weekNameFormat);
    void dayChanged(QDate date);




public slots:
    void clicked(QDate, CalendarItem::DayType);
    void showPreviousYear();
    void showNextYear();
    void showPreviousMonth();
    void showNextMonth();
    void showToday();
    void yearChanged(QString);
    void monthChanges(QString);
    void dateChanged(int year, int month, int day);

    //设置整体样式
    void setCalendarStyle(const CalendarStyle &calendarStyle);
    //设置星期名称格式
    void setWeekNameFormat(const WeekNameFormat &weekNameFormat);

    //设置日期
    void setDate(const QDate &date);

    //设置顶部星期名称文字颜色+背景色
    void setWeekTextColor(const QColor &weekTextColor);
    void setWeekBgColor(const QColor &weekBgColor);

    //设置是否显示农历信息
    void setShowLunar(bool showLunar);
    //设置背景图片
    void setBgImage(const QString &bgImage);
    //设置选中背景样式
    void setSelectType(const SelectType &selectType);

    //设置边框颜色
    void setBorderColor(const QColor &borderColor);
    //设置周末颜色
    void setWeekColor(const QColor &weekColor);
    //设置角标颜色
    void setSuperColor(const QColor &superColor);
    //设置农历节日颜色
    void setLunarColor(const QColor &lunarColor);

    //设置当前月文字颜色
    void setCurrentTextColor(const QColor &currentTextColor);
    //设置其他月文字颜色
    void setOtherTextColor(const QColor &otherTextColor);
    //设置选中日期文字颜色
    void setSelectTextColor(const QColor &selectTextColor);
    //设置悬停日期文字颜色
    void setHoverTextColor(const QColor &hoverTextColor);

    //设置当前月农历文字颜色
    void setCurrentLunarColor(const QColor &currentLunarColor);
    //设置其他月农历文字颜色
    void setOtherLunarColor(const QColor &otherLunarColor);
    //设置选中日期农历文字颜色
    void setSelectLunarColor(const QColor &selectLunarColor);
    //设置悬停日期农历文字颜色
    void setHoverLunarColor(const QColor &hoverLunarColor);

    //设置当前月背景颜色
    void setCurrentBgColor(const QColor &currentBgColor);
    //设置其他月背景颜色
    void setOtherBgColor(const QColor &otherBgColor);
    //设置选中日期背景颜色
    void setSelectBgColor(const QColor &selectBgColor);
    //设置悬停日期背景颜色
    void setHoverBgColor(const QColor &hoverBgColor);
signals:
    void selectionChanged();
    void clicked(const QDate &date);

};

#endif // CALENDAR_H
